import functools
import warnings

from rest_framework import status

from weiwenhai_Oj.utils.global_functions import Response


def deprecated(reason=None, replacement=None):
    """
    一个标记函数为废弃的装饰器。

    参数:
        reason (str, 可选): 废弃的原因。
        replacement (str, 可选): 应该使用的替代函数名称。

    返回:
        Response: 返回包含废弃信息的响应，HTTP状态码为300。

    使用方法:
    1. 在需要标记为废弃的函数上添加@deprecated装饰器。
    2. 提供废弃的原因以及（可选的）替代函数名称。

    示例:
    @deprecated(reason="该功能已被更新为新版本", replacement="new_function")
    def old_function():
        pass
    """

    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            message = f"'{func.__name__}' 由于{reason},该接口已被废弃。"
            if replacement:
                message += f"并将在未来的版本中删除。请改用 '{replacement}' 。"
            warnings.warn(message, DeprecationWarning, stacklevel=2)
            return Response(msg=message, status=status.HTTP_300_MULTIPLE_CHOICES)

        return wrapper

    return decorator
